/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.FormatoExportacion;
import org.cip.esymons.general.util.Reporteador;
import org.cip.esymons.tesoreria.bc.TipoCambioDelegate;
import org.cip.esymons.tesoreria.bc.TipoMonedaDelegate;
import org.cip.esymons.tesoreria.be.TipoCambio;
import org.cip.esymons.tesoreria.be.TipoMoneda;

/**
 *
 * @author Ingrid
 */
public class TipoCambioController {

    @Resource(name = "jdbcesymons")
    private DataSource jdbcesymons;
    private TipoCambioDelegate delegado;
    private TipoMonedaDelegate tipoMonedaDelegate;
    private TipoCambio tipoCambio;
    private List<TipoCambio> listaTipoCambio;
    /*para reporte de tipos de cambio*/
    private Date fecIniCambio;
    private Date fecFinCambio;
    /*fin de reporte*/

    public TipoCambioController() {
        delegado = new TipoCambioDelegate();
        tipoMonedaDelegate = new TipoMonedaDelegate();
    }

    public List<TipoCambio> getListaTipoCambioBuscar() {
        return delegado.listaTiposCambiosOrdenadosPorFecha();
    }

    public List<TipoCambio> getListaTiposCambiosEntreFechas(){
         return delegado.TiposCambiosEntreRangosDeFecha(fecIniCambio,fecFinCambio);
        
            
    }

    /**CODIGO DE REPORTES DE TIPOS DE CAMBIO DE MONEDAS POR FECHA*/
    public String reporteTiposCambioMonedasXFecha() throws SQLException {
        if (fecIniCambio==null){
                ControladorAbstracto.warn("Seleccione una Fecha Final");

        }
        if (fecFinCambio==null){
            ControladorAbstracto.warn("Seleccione una Fecha Inicial");

        }
        if (fecIniCambio!=null & fecFinCambio!=null){
            if (fecFinCambio.compareTo(fecIniCambio)<0){
                ControladorAbstracto.warn("La Fecha Final debe ser Mayor o Igual que la Fecha Inicial");
            }else{
                List<TipoCambio> lista = delegado.TiposCambiosEntreRangosDeFecha(fecIniCambio, fecFinCambio);
                if (lista != null) {
                    if (lista.size() > 0) {
                        Reporteador reporteador = new Reporteador();
                        reporteador.exportarReporte("rptTipoCambio", FormatoExportacion.pdf, lista, null);
                    }
                }
            }
        }        
        return null;
    }


    public String buscarTiposCambio(){
        if (fecIniCambio==null){
                ControladorAbstracto.warn("Seleccione una Fecha Final");

        }
        if (fecFinCambio==null){
            ControladorAbstracto.warn("Seleccione una Fecha Inicial");

        }
        if (fecIniCambio!=null & fecFinCambio!=null){
            if (fecFinCambio.compareTo(fecIniCambio)<0){
                ControladorAbstracto.warn("La Fecha Final debe ser Mayor o Igual que la Fecha Inicial");
            }
        }

        return null;
    }

    public String nuevo() {
        if (!delegado.existeTipoCambio(new Date())) {
            listaTipoCambio = new ArrayList<TipoCambio>();
            List<TipoMoneda> lista = tipoMonedaDelegate.listaMonedasActivas();
            TipoMoneda tipoMoneda = tipoMonedaDelegate.buscarMonedaDefecto();
            lista.remove(tipoMoneda);
            TipoCambio tc = null;
            for (TipoMoneda tm : lista) {
                tc = new TipoCambio();
                tc.setTmoCodigo(tm);
                tc.setTmocodigoDefecto(tipoMoneda);
                tc.setTpcFecha(new Date());
                listaTipoCambio.add(tc);
            }
            return "nuevo";
        } else {
            return null;
        }
    }

    public boolean getExisteTipoCambioActual(Date fecha) {
        return delegado.existeTipoCambio(fecha);
    }

    public void eliminartipoCambio(Date fecha) {
        TipoCambio tc = delegado.buscarTipoCambioXFecha(fecha);
        if(tc!=null){
            delegado.remove(tc);
        }
    }

    public String reporteConConexion() throws SQLException {
        Reporteador reporteador = new Reporteador();
        reporteador.exportarReporte("reporte_TipoMoneda", FormatoExportacion.pdf, jdbcesymons.getConnection(), null);
        return null;
    }

    public String reporteConObjetos() throws SQLException {
        List<TipoCambio> lista = delegado.findAll();
        Reporteador reporteador = new Reporteador();
        reporteador.exportarReporte("reporte_TipoMoneda_Object", FormatoExportacion.pdf, lista, null);
        return null;
    }

    public String copiarMismosValores() {
        for (TipoCambio tc : listaTipoCambio) {
            tc.setTpcValor(tc.getTmoCodigo().getCambioActual());
        }
        return null;
    }

    public String grabar() {
        for (TipoCambio tc : listaTipoCambio) {
            tc.getTmoCodigo().setCambioActual(tc.getTpcValor());
            tipoMonedaDelegate.edit(tc.getTmoCodigo());
            delegado.create(tc);
        }
        return "buscar";
    }

    public String grabarDesdeDP() {
        for (TipoCambio tc : listaTipoCambio) {
            tc.getTmoCodigo().setCambioActual(tc.getTpcValor());
            tipoMonedaDelegate.edit(tc.getTmoCodigo());
            delegado.create(tc);
        }
        return null;
    }

    public String cancelarDesdeDP() {
        listaTipoCambio = null;
        return null;
    }

    public List<TipoCambio> getListaTipoCambioDesdeDP() {
        if (listaTipoCambio == null) {
            listaTipoCambio = new ArrayList<TipoCambio>();
            List<TipoMoneda> lista = tipoMonedaDelegate.findAll();
            TipoMoneda tipoMoneda = tipoMonedaDelegate.buscarMonedaDefecto();
            lista.remove(tipoMoneda);
            TipoCambio tc = null;
            for (TipoMoneda tm : lista) {
                tc = new TipoCambio();
                tc.setTmoCodigo(tm);
                tc.setTmocodigoDefecto(tipoMoneda);
                tc.setTpcFecha(new Date());
                listaTipoCambio.add(tc);
            }
        }
        return listaTipoCambio;
    }

    public List<TipoCambio> getListaTipoCambio() {
        return listaTipoCambio;
    }

    public void setListaTipoCambio(List<TipoCambio> listaTipoCambio) {
        this.listaTipoCambio = listaTipoCambio;
    }

    public TipoCambio getTipoCambio() {
        return tipoCambio;
    }

    public void setTipoCambio(TipoCambio tipoCambio) {
        this.tipoCambio = tipoCambio;
    }

    /**
     * @return the fecIniCambio
     */
    public Date getFecIniCambio() {
        return fecIniCambio;
    }

    /**
     * @param fecIniCambio the fecIniCambio to set
     */
    public void setFecIniCambio(Date fecIniCambio) {
        this.fecIniCambio = fecIniCambio;
    }

    /**
     * @return the fecFinCambio
     */
    public Date getFecFinCambio() {
        return fecFinCambio;
    }

    /**
     * @param fecFinCambio the fecFinCambio to set
     */
    public void setFecFinCambio(Date fecFinCambio) {
        this.fecFinCambio = fecFinCambio;
    }
}
